python进程通信方式总结(二):队列与信号

您所在的位置:网站首页 python信号槽 删除 python进程通信方式总结(二):队列与信号

python进程通信方式总结(二):队列与信号

2024-07-05 13:13| 来源: 网络整理| 查看: 265

引言

在上一篇中,探讨了关于信号量以及管道在进程中通信的使用方式和注意点,那么本篇想总结的是队列以及信号的使用方式与注意点。

队列说明

队列(queue)是一种先进先出的(First In First Out)的线性表,简称FIFO。队列允许在一端进行插入操作,而在另一端进行删除操作。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作。

关于队列的使用以及构造,在很早之前有写过一篇相关的内容:

python利用数组和链表实现栈和队列

这里就不再做过多介绍了,开始进程中队列通信说明。

python利用队列通信 python队列原理

首先,最常见的通信队列是通过multiprocessing直接导入queue,它的参数为:

Queue.qsize():返回当前队列包含的消息数量。

Queue.empty():如果队列为空,返回True,反之False。

Queue.full():如果队列满了,返回True,反之False。

Queue.get([block[, timeout]]):获取队列中的一条消息,然后将其从列队中移除,block 默认值为 True。

如果 block 使用默认值,且没有设置 timeout(单位秒),消息队列如果为空,此时程序将被阻塞,停在读取状态,直到从消息队列读到消息为止;如果设置了 timeout,则会等待 timeout 秒,若还没读取到任何消息,则抛出 “Queue.Empty” 异常。如果 block 值为 False,消息列队如果为空,则会立刻抛出 “Queue.Empty” 异常。

Queue.get_nowait():相当 Queue.get(False)。

Queue.put(item,[block[, timeout]]):将 item 消息写入队列,block 默认值为 True。

如果 block 使用默认值,且没有设置 timeout(单位秒),消息队列如果已经没有空间可写入,此时程序将被阻塞,停在写入状态,直到从消息队列腾出空间为止;如果设置了timeout,则会等待 timeout 秒,若还没空间,则抛出 “Queue.Full” 异常。如果 block 值为 False,消息队列如果没有空间可写入,则会立刻抛出 “Queue.Full” 异常。

Queue.put_nowait(item):相当Queue.put(item, False)。

另外在上一篇中我有提到过一个题,叫锁原语,虽然目前还是不知道啥意思,但为什么队列能比管道证明线程安全,我觉得从源码的角度上就能看到结果:

class Queue: '''Create a queue object with a given maximum size. If maxsize is


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3